/**
 * Содержит объявление собственного алогоритма find_all.
 *
 * Данный алгоритм ищет в контейнере все элементы, удовлетворяющие
 * заданному условию, и возвращает список итераторов на них.
 */

#ifndef _FINDALL_H
#define	_FINDALL_H

#include <list>
#include <algorithm>

namespace etu {
namespace common {

template <typename InputIterator, typename T, typename Predicate>
std::list<T>* find_all(InputIterator it, T object,
        Predicate pred)
{
  std::list<T>* ret = new std::list<T>();

  while(it->hasNext())
  {
    T value = it->next();

	if (pred(value,object))
	  ret->push_back(value);
  }

  return ret;
}

}
}

#endif	/* _FINDALL_H */

